home *** CD-ROM | disk | FTP | other *** search
/ Java Primer Plus / Java Primer Plus (Waite Group Proess)(1996).iso / chapter13 / javadraw.java < prev    next >
Text File  |  1995-12-31  |  6KB  |  244 lines

  1. /* JavaDraw applet version */
  2.  
  3.     import java.awt.*;
  4.  
  5.     public class javadraw extends java.applet.Applet {
  6.  
  7.     MyWidgets WControls;
  8.     MyColors ColorControls;
  9.     static Rectangle DrawSize;
  10.  
  11.     /* The init of the Applet */
  12.     public void init() {
  13.        DrawSize = bounds();
  14.            setLayout(new BorderLayout()); 
  15.  
  16.        /* Setup the Canvas */
  17.            MyCanvas c = new MyCanvas(); 
  18.  
  19.            add("North", WControls = new MyWidgets(c)); 
  20.  
  21.        /* Add controls to the bottom of the applet */
  22.            add("Center", c); 
  23.            add("South", ColorControls = new MyColors(c)); 
  24.      }
  25.  
  26.     /* Switch stuff on */
  27.     public void start() { 
  28.           ColorControls.enable();
  29.           WControls.enable(); 
  30.           }
  31.  
  32.     /* Switch stuff off */
  33.     public void stop() {
  34.           ColorControls.disable(); 
  35.           WControls.disable();
  36.           }
  37.     }
  38.  
  39.     /* Creating a Canvas Class */
  40.     class MyCanvas extends Canvas {
  41.  
  42.     /* The x,y coordinates, height & width */
  43.       int drawX,drawY,drawH,drawW;
  44.       String mt;
  45.  
  46.     /*  Set these to make the code more readable */
  47.  
  48.     final int _RESET      = 0; //reset drawing field
  49.     final int _RECTANGLE  = 1; 
  50.     final int _FILLEDRECT = 2;
  51.     final int _CIRCLE     = 3;
  52.     final int _FILLEDCIRC = 4;
  53.     final int _LINE       = 5;
  54.     final int _TEXT       = 6;
  55.  
  56.     /* current drawing color */
  57.     Color drawCol = Color.black;
  58.  
  59.     /* current drawing mode  */
  60.     int drawAct = _LINE;
  61.  
  62.  
  63.     /* The following is the main drawing routine  */
  64.     /* of the applet. There is no persistance of  */
  65.     /* drawn objects, so if the appletis obscured */
  66.     /* and then brought front again, only the     */
  67.     /* most recently drawn object will be redrawn */
  68.  
  69.     public void paint(Graphics g) {
  70.  
  71.        g.setColor(Color.lightGray); 
  72.        Rectangle r = bounds();
  73.        if (drawAct == _RESET)
  74.         g.fillRect(0,0,r.width,r.height); 
  75.        else {
  76.            g.fillRect(0,0,80,15); 
  77.         g.setColor(Color.black);
  78.         g.drawRect(0,0,80,15); 
  79.        }
  80.  
  81.        g.setColor(Color.black);
  82.        g.drawString("JavaDraw",r.width/2-20,15); 
  83.  
  84.        g.drawRect(0,0,r.width-1,r.height-1); 
  85.  
  86.        g.setColor(drawCol);
  87.  
  88.       /* perform the selected drawing routine */
  89.        switch (drawAct) { 
  90.  
  91.           case _RECTANGLE  : g.drawRect(drawX,drawY,drawW, drawH);
  92.                        g.drawString("Rectangle",0,10);
  93.                    break;
  94.           case _FILLEDRECT : g.fillRect(drawX,drawY,drawW, drawH);
  95.                        g.drawString("Fill Rectangle",0,10);
  96.                    break;
  97.           case _CIRCLE     : g.drawOval(drawX,drawY,drawW,drawH);
  98.                        g.drawString("Circle",0,10);
  99.                   break;
  100.           case _LINE       : g.drawLine(drawX,drawY,drawW,drawH);
  101.                        g.drawString("Line",0,10);
  102.                    break;
  103.           case _FILLEDCIRC : g.fillOval(drawX,drawY,drawW,drawH);
  104.                        g.drawString("fill Circle",0,10);
  105.                    break;
  106.           case _TEXT       : g.drawString(mt,drawX,drawY);
  107.                    g.drawString(mt,0,10);
  108.                   break;
  109.        }
  110.     } 
  111.  
  112.     /* standard overridden update */
  113.     public void update(Graphics g) { paint(g); }
  114.  
  115.     /* set dimensions to zero */
  116.     public void redraw() {
  117.           drawX = drawY = drawW = drawH = 0;
  118.           repaint();
  119.     }
  120.  
  121.     /* Mouse Handling */
  122.     public boolean mouseDown(Event e, int x, int y) {
  123.            drawX=x;
  124.         drawY=y;
  125.         return true;
  126.     }
  127.  
  128.     public boolean mouseUp(Event e, int x, int y) {
  129.  
  130.        if(drawAct == _LINE) {
  131.         drawW=x;
  132.         drawH=y;
  133.         repaint();
  134.         return true;
  135.        }
  136.          
  137.        /* Not a line, extract the coordinates */
  138.  
  139.        drawW = java.lang.Math.abs(x - drawX);
  140.        if (x < drawX) drawX = x;
  141.  
  142.        drawH = java.lang.Math.abs(y - drawY);
  143.        if (y < drawY) drawY = y;
  144.  
  145.        repaint(); //draw our new object
  146.        return true;
  147.       }
  148.     }
  149.  
  150.     /* Setup the Widgets */
  151.     class MyWidgets extends Panel {
  152.  
  153.     MyCanvas canvas; 
  154.     TextField mt;
  155.  
  156.     public MyWidgets(MyCanvas canvas) {
  157.        this.canvas = canvas;
  158.        add(mt = new TextField("",10));
  159.        add(new Button("Text"));
  160.        add(new Button("Line"));
  161.        add(new Button("Rect"));
  162.        add(new Button("FillRect"));
  163.        add(new Button("Circle"));
  164.        add(new Button("FillCircle"));
  165.        add(new Button("Reset"));
  166.     }
  167.  
  168.     /* grab events and look for button events */
  169.     public boolean action(Event ev, Object arg) {
  170.  
  171.        if(ev.target instanceof Button) {
  172.           canvas.drawAct = whichact((String)arg);
  173.           if (canvas.drawAct == canvas._TEXT)
  174.         canvas.mt = mt.getText();
  175.           if (canvas.drawAct == canvas._RESET)
  176.         canvas.repaint();
  177.  
  178.           canvas.redraw(); 
  179.           return true;
  180.        } 
  181.        return false;
  182.     }
  183.  
  184.  
  185.     private int whichact(String T) {
  186.  
  187.           if (T.equals("Text"))       return canvas._TEXT;
  188.           if (T.equals("Reset"))        return canvas._RESET;
  189.           if (T.equals("Line"))       return canvas._LINE;
  190.           if (T.equals("Rect"))       return canvas._RECTANGLE;
  191.           if (T.equals("FillRect"))   return canvas._FILLEDRECT;
  192.           if (T.equals("Circle"))     return canvas._CIRCLE;
  193.           if (T.equals("FillCircle")) return canvas._FILLEDCIRC;
  194.  
  195.           return -1;
  196.           }
  197.     }
  198.  
  199.  
  200.  
  201. class MyColors extends Panel {
  202.  
  203.         MyCanvas canvas; //canvas that calls this
  204.  
  205.  
  206.         public MyColors(MyCanvas canvas) {
  207.            this.canvas = canvas; //set canvas to calling class
  208.            add(new Button("Blue"));
  209.            add(new Button("Red"));
  210.            add(new Button("Yellow"));
  211.            add(new Button("Black"));
  212.            add(new Button("Green"));
  213.            add(new Button("Gray"));
  214.     }
  215.  
  216.         public boolean action(Event ev, Object arg) {
  217.            if(ev.target instanceof Button) {
  218.               String label = (String)arg;
  219.  
  220.           canvas.drawCol = whichcol((String)arg);
  221.  
  222.           canvas.redraw(); 
  223.         //calls paint for new color to appear in
  224.         //tool selection field
  225.               return true;
  226.            }
  227.            return false;
  228.         }
  229.  
  230.     private Color whichcol(String T) {
  231.               if (T.equals("Blue"))   return Color.blue;
  232.               if (T.equals("Black"))  return Color.black;
  233.               if (T.equals("Yellow")) return Color.yellow;
  234.               if (T.equals("Red"))    return Color.red;
  235.               if (T.equals("Green"))  return Color.green;
  236.               if (T.equals("Gray"))   return Color.gray;
  237.           return null;
  238.        }
  239.     
  240.  
  241. }
  242.  
  243.  
  244.